package com.simple;

/**
 * 给出一个 32 位的有符号整数，你需要将这个整数中每位上的数字进行反转。
 */
public class Question7 {

    public static void main(String[] args) {
        System.out.println(reverse(123));
    }

    /**
     * 思路
     * 取个位数，循环整数的总长度
     * 1. 取末位数：整数取余，剩余整数取商
     * 2. 循环 结果 = 余数* i * 10 + 余数
     */
    private static int reverse(int x) {
        int result = 0;

        while (x != 0) {
            int sum = x % 10;
            // 处理整数溢出的情况
            if (result > Integer.MAX_VALUE / 10 || (result == Integer.MAX_VALUE / 10 && sum > 7))
                return 0;
            if (result < Integer.MIN_VALUE / 10 || (result == Integer.MIN_VALUE / 10 && sum < -8))
                return 0;
            result = result * 10 + sum;
            x = x / 10;
        }

        return result;
    }
}
